home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / shells / scsh-0.4 / scsh-0 / scsh-0.4.2 / scsh / startup.scm < prev    next >
Text File  |  1995-10-13  |  2KB  |  65 lines

  1. ;;; Scsh start-up code.
  2. ;;; Copyright (c) 1995 by Olin Shivers.
  3.  
  4. ;;; A scsh starter takes the command line args, parses them, 
  5. ;;; initialises the scsh system, and either starts up a repl loop
  6. ;;; or executes the -s script.
  7.  
  8. (define (make-scsh-starter)
  9.   (let ((context (user-context)))
  10.     (lambda (args)
  11.       (parse-switches-and-execute args context))))
  12.  
  13.  
  14. ;;; Had to define these as the ones in s48's build.scm do not properly
  15. ;;; initialise ERROR-OUTPUT-PORT to stderr -- this is a bug in the vm's
  16. ;;; handoff to the very first Scheme form (it passes two ports -- not three).
  17. ;;; Until Kelsey fixes these, we hack it with these replacements, which
  18. ;;; invoke INIT-SCSH-HINDBRAIN, which re-initialises the I/O system to be 
  19. ;;; what you wanted.
  20.  
  21. ;;; WRITE-IMAGE calls the starter after installing a fatal top-level
  22. ;;; error handler. MAKE-SCSH-STARTER shadows it in the interactive case.
  23.  
  24. (define (really-dump-scsh-program start filename)
  25.   (let ((filename (translate filename)))
  26.     (display (string-append "Writing " filename) (command-output))
  27.     (newline (command-output))
  28.     (flush-the-symbol-table!)    ;Gets restored at next use of string->symbol
  29.     (write-image filename
  30.          (scsh-stand-alone-resumer start)
  31.          "")
  32.     #t))
  33.  
  34.  
  35. ;;; This one relies on the scsh top-level command-line switch parser
  36. ;;; to decide whether to do the scsh-var inits quietly or with warnings.
  37.  
  38. (define (dump-scsh fname)
  39.   (really-dump-scsh-program (make-scsh-starter) fname))
  40.  
  41. ;;; Init the scsh run-time's vars quietly before running the program.
  42. ;;; This is what we export to the user for his programs.
  43.  
  44. (define (dump-scsh-program start filename)
  45.   (really-dump-scsh-program (lambda (args)
  46.                   (init-scsh-vars #t)    ; Do it quietly.
  47.                   (start args))
  48.                 filename))
  49.  
  50.  
  51. (define (scsh-stand-alone-resumer start)
  52.   (usual-resumer  ;sets up exceptions, interrupts, and current input & output
  53.    (lambda (args)
  54.      (init-scsh-hindbrain #t)    ; Whatever. Relink & install scsh's I/O system.
  55.      (call-with-current-continuation
  56.        (lambda (halt)
  57.      (set! %full-command-line args)
  58.      (set-command-line-args! (cons "" args))    ; WRONG.
  59.      (with-handler (simple-condition-handler halt (error-output-port))
  60.        (lambda ()
  61.          (let ((exit-val (start command-line-arguments)))
  62.            (if (integer? exit-val) exit-val 0))))))))) ; work around bug.
  63.  
  64. (define %full-command-line #f)
  65.